//
//  Parameters_Convolutioner.h
//  FilterModule_Standalone
//
//  Created by kadlubek47 on 05.08.2013.
//  Copyright (c) 2013 kadlubek47. All rights reserved.
//

#ifndef LowPassFilter_Standalone_Parameters_Convolutioner_h
#define LowPassFilter_Standalone_Parameters_Convolutioner_h

#include <string>
#include "GeneralExceptions.h"

class Parameters_Convolutioner {
public:
    enum ProcessingMethodID {
        NORMAL_CPU = 1,
        //MULTITHREADED_CPU,
        OPENCL_GPU = 2
        //OPENCL_CPU
    };
    enum DomainID {
        TIME_DOMAIN = 1,
        FREQUENCY_DOMAIN = 2
    };
    ProcessingMethodID processingMethod_;
    DomainID domain_;
    
    std::string getString_ProcessingMethod() {
        switch (processingMethod_) {
            case NORMAL_CPU:
                return std::string("OneThreaded_CPU");
            case OPENCL_GPU:
                return std::string("OpenCL_GPU");
            default:
                throw UnkownInternalProcessingError_Exception();
        }
    }
    std::string getString_Domain() {
        switch (domain_) {
            case TIME_DOMAIN:
                return std::string("Time");
            case FREQUENCY_DOMAIN:
                return std::string("Frequency");
            default:
                throw UnkownInternalProcessingError_Exception();
        }
    }

    Parameters_Convolutioner() {}
    Parameters_Convolutioner (ProcessingMethodID processingMethod, DomainID domain) {
        processingMethod_  = processingMethod;
        domain_             = domain;
    }
    bool operator !=(const Parameters_Convolutioner& p) {
        if(  processingMethod_ != p.processingMethod_  ||
             domain_            != p.domain_
           )
                return true;
        return false;
    }
};

#endif
